import router from "./router";
import store from "./store";
import NProgress from "nprogress"; // Progress 进度条
import "nprogress/nprogress.css"; // Progress 进度条样式
import { Message } from "element-ui";
import { getToken } from "@/utils/auth"; // 验权
import { getAllPanels } from "@/utils/panels";

const whiteList = ["/login"]; // 不重定向白名单
router.beforeEach((to, from, next) => {
    NProgress.start();
    if (getToken()) {
        if (to.path === "/login") {
            next({ path: "/" });
            NProgress.done(); // if current page is dashboard will not trigger	afterEach hook, so manually handle it
        } else {
            // 用户在新建、待审核或者密码重置状态下，返回的菜单是空的，所以不能根据菜单来判断是否取回了用户信息
            //if (store.getters.mainMenu.length === 0) {
            if (store.getters.myuser === null) {
                store
                    .dispatch("GetInfo")
                    .then(res => {
                        // 拉取用户信息
                        next();
                    })
                    .catch(err => {
                        store.dispatch("FedLogOut").then(() => {
                            Message.error(
                                err || "Verification failed, please login again"
                            );
                            next({ path: "/" });
                        });
                    });
                // 初始化主菜单
                store.dispatch("InitPanels", getAllPanels());
                store.dispatch("InitDictMap");
            } else {
                next();
            }
        }
    } else {
        if (whiteList.indexOf(to.path) !== -1) {
            next();
        } else {
            next("/login");
            NProgress.done();
        }
    }
});

router.afterEach(() => {
    NProgress.done(); // 结束Progress
});
